#-*- coding: utf8 -*-
from tutor.scripts import *
from tutor.plugins.maple import *

# variáveis úteis
half = M('1/2')
t = M.t
diff = M.diff
_i, _j, _k = M('_i, _j, _k')
rr = M('`..`')

# parâmetros iniciais
a,k = map(M, oneof(
    (2, 3*half),
    (1, 2),
    (half, 3*half),
    (2, 2)
))
aa = str(a) if a > 0 else '(%s)' % a
kk = str(k) if a > 0 else '(%s)' % k

forcevec = oneof(
    x*_i + y*_j + z*_k,
    y*_i - x*_j + 2*z*_k,      
)
# ATENCAO! --- lista de exercicios --------------------------------------------
#a,k = 1,2
#forcevec = y*_i - x*_j + 2*z*_k

# funções relacionadas ao caminho
X = a * cos(t)
Y = a * sin(t)
Z = k * t
Vx, Vy, Vz = ( M.diff(f, t) for f in [X, Y, Z] )
force = M.subs(x==X, y==Y, z==Z, forcevec)
Fx, Fy, Fz = ( M.coeff(force, v) for v in [_i, _j, _k] )
print('variáveis: \n\tR=(%s, %s, %s)\n\tV=(%s, %s, %s)\n\tF=(%s, %s, %s)' 
       % (X, Y, Z, Vx, Vy, Vz, Fx, Fy, Fz))

# resposta correta
v = M.simplify(M.sqrt(Vx**2 + Vy**2 + Vz**2))
sfunc = v * t
print('resposta correta: %s' % sfunc)

# esqueceu derivada
v = M.simplify(M.sqrt(X**2 + Y**2 + Z**2))
sNdiff = M.int(v, t)
print('esqueceu derivada: %s' % sNdiff)

# círculo
v = M.simplify(M.sqrt(Vx**2 + Vy**2))
sCirc = v * t
print('círculo: %s' % sCirc)

# dl = dx + dy + dz
v = Vx + Vy + Vz
sErr = M.int(v, t)
print('dl = dx + dy + dz: %s' % sErr)

# segunda parte da questão: integral do segundo tipo
vF = M.simplify(Vx*Fx + Vy*Fy + Vz*Fz)
sfunc2 = M.int(vF, t=rr(0, M.Pi))
print('\n\nsegunda parte\nresposta correta: %s' % sfunc2)

# esqueceu derivada
vF = M.simplify(X*Fx + Y*Fy + Z*Fz)
sNdiff2 = M.int(vF, t=rr(0, M.Pi))
print('esqueceu derivada: %s' % sNdiff2)

# círculo
vF = M.simplify(Vx*Fx + Vy*Fy)
sCirc2 = M.int(vF, t=rr(0, M.Pi))
print('círculo: %s' % sCirc2)

# dl = dx + dy + dz
vF = (Vx + Vy + Vz) * (Fx + Fy + Fz)
sErr2 = M.int(vF, t=rr(0, M.Pi))
print('dl = dx + dy + dz: %s' % sErr2)
